package ar.com.arkios.kfconsap.tablas;


import ar.com.arkios.kfconmodelo.modelo.MessageReturnOperation;
import ar.com.arkios.kfconsap.excepciones.DataTypeInvalidConversionException;
import ar.com.arkios.kfconsap.excepciones.SapGeneralException;
import ar.com.arkios.kfconsap.excepciones.TableNotFoundException;
import com.sap.mw.jco.JCO;
import org.apache.log4j.Logger;

/**
 *
 * @author Ale
 * @version 1.01
 */
public class ReturnDAO extends GenericSAPDAO{
    
    private MessageReturnOperation aMessageReturnOperation;
    private static final Logger miLogger = Logger.getLogger(NotifDAO.class);


    
    public ReturnDAO(JCO.Function aFunction) throws DataTypeInvalidConversionException, TableNotFoundException {
        super.setMyTableName("T_RETURN");
        super.setMyTable(aFunction);
    }

    /**
     * 
     *  TCODE	BDC_TCODE	CHAR	20	BDC Código de transacción
     *  DYNAME	BDC_MODULE	CHAR	40	Batch input Nombre del módulo
     *  DYNUMB	BDC_DYNNR	CHAR	4	Batch input Número de dynpro
     *  MSGTYP	BDC_MART	CHAR	1	Batch input Clase de mensaje
     *  MSGSPRA	BDC_SPRAS	CHAR	1	Clave idioma de un mensaje
     *  MSGID	BDC_MID		CHAR	20	Batch input ID de mensaje
     *  MSGNR	BDC_MNR		CHAR	3	Batch input Número de mensaje
     *  MSGV1	BDC_VTEXT1	CHAR	100	Parte variable de un mensaje
     *  MSGV2	BDC_VTEXT1	CHAR	100	Parte variable de un mensaje
     *  MSGV3	BDC_VTEXT1	CHAR	100	Parte variable de un mensaje
     *  MSGV4	BDC_VTEXT1	CHAR	100	Parte variable de un mensaje
     *  ENV	BDC_AKT		CHAR	4	Batch input, actividades monitoring
     *  FLDNAME	FNAM_____4	CHAR	132	Nombre campo
     * 
     */

    @Override
    public void findAll() throws SapGeneralException {                       
            int col = super.getMyTable().getNumRows();
            int posMsgReturn;
            char msgtypeAux;
            String msgidAux;
            String msgnrAux;
           // String msg1;
           // String msg2;
           // String msg3;
           // String msg4;
            if(col>0){
                posMsgReturn = col -1;
                
                try{
                    for (int i = 0; i < col; i++){
                        super.getMyTable().setRow(i);
                        msgtypeAux = super.getMyTable().getChar("MSGTYP");
                        msgidAux = super.getMyTable().getString("MSGID").toUpperCase();
                        msgnrAux = super.getMyTable().getString("MSGNR").toUpperCase();
                        miLogger.debug("Registro Nro. " + i +" de la Tabla Return.");
                        miLogger.debug("MSGTYP: " + msgtypeAux);
                        miLogger.debug("MSGID: " + msgidAux);
                        miLogger.debug("MSGNR: " + msgnrAux);
                        miLogger.debug("DYNAME: " + super.getMyTable().getString("DYNAME"));
                        miLogger.debug("DYNUMB: " + super.getMyTable().getString("DYNUMB"));
                        miLogger.debug("MSGSPRA: " + super.getMyTable().getChar("MSGSPRA"));
                        miLogger.debug("MSGV1: " + super.getMyTable().getString("MSGV1"));
                        miLogger.debug("MSGV2: " + super.getMyTable().getString("MSGV2"));
                        miLogger.debug("MSGV3: " + super.getMyTable().getString("MSGV3"));
                        miLogger.debug("MSGV4: " + super.getMyTable().getString("MSGV4"));

                        //Esto es para debug only
                        //msg1 = super.getMyTable().getString("MSGV1");
                        //msg2 = super.getMyTable().getString("MSGV2");
                        //msg3 = super.getMyTable().getString("MSGV3");
                        //msg4 = super.getMyTable().getString("MSGV4");

                        if((msgtypeAux == 'I') &&(msgidAux.equals("ZN")) && (msgnrAux.equals("060"))){
                            posMsgReturn = i;
                        }
                    }
                    aMessageReturnOperation=new MessageReturnOperation();
                    super.getMyTable().setRow(posMsgReturn);                  
                    aMessageReturnOperation.setMessageType(super.getMyTable().getChar("MSGTYP"));
                    aMessageReturnOperation.setMyDynName(super.getMyTable().getString("DYNAME"));
                    aMessageReturnOperation.setMyDynNumber(super.getMyTable().getString("DYNUMB"));
                    aMessageReturnOperation.setMyLanguajeKeyMessage(super.getMyTable().getChar("MSGSPRA"));
                    aMessageReturnOperation.setMyMessageID(super.getMyTable().getString("MSGID"));
                    aMessageReturnOperation.setMyBatchInputMessageNumber(super.getMyTable().getString("MSGNR"));
                    aMessageReturnOperation.setMyMessageDesc1(super.getMyTable().getString("MSGV1"));
                    aMessageReturnOperation.setMyMessageDesc2(super.getMyTable().getString("MSGV2"));
                    aMessageReturnOperation.setMyMessageDesc3(super.getMyTable().getString("MSGV3"));
                    aMessageReturnOperation.setMyMessageDesc4(super.getMyTable().getString("MSGV4"));
                    aMessageReturnOperation.setMyBatchInputMonitoring(super.getMyTable().getString("ENV"));
                    aMessageReturnOperation.setMyFieldName(super.getMyTable().getString("FLDNAME"));
                    miLogger.debug("Mensaje Seleccionado de la Tabla Return. Registro elegido: "+(posMsgReturn+1));
                    miLogger.debug("MSGTYP: " + super.getMyTable().getChar("MSGTYP"));
                    miLogger.debug("MSGID: " + super.getMyTable().getString("MSGID"));
                    miLogger.debug("MSGNR: " + super.getMyTable().getString("MSGNR"));
                    miLogger.debug("DYNAME: " + super.getMyTable().getString("DYNAME"));
                    miLogger.debug("DYNUMB: " + super.getMyTable().getString("DYNUMB"));
                    miLogger.debug("MSGSPRA: " + super.getMyTable().getChar("MSGSPRA"));
                    miLogger.debug("MSGV1: " + super.getMyTable().getString("MSGV1"));
                    miLogger.debug("MSGV2: " + super.getMyTable().getString("MSGV2"));
                    miLogger.debug("MSGV3: " + super.getMyTable().getString("MSGV3"));
                    miLogger.debug("MSGV4: " + super.getMyTable().getString("MSGV4"));

                }catch(JCO.ConversionException ex){
                    try {
                        throw new DataTypeInvalidConversionException(ex.getMessage());
                    } catch (DataTypeInvalidConversionException ex1) {
                        throw new SapGeneralException(ex1.getMessage());
                    }
                }
            }else{
                throw new SapGeneralException("Tabla de Retorno de SAP sin registros.");
            }
            
    }
    /**
     * Solo para las pruebas
     */
    @Override
    public void printAll() {
        System.out.println("TCODE"+'\t'+"DYNAME"+'\t'+"DYNUMB"+'\t'+"MSGTYP"+'\t'+"MSGSPRA"+'\t'+"MSGID"+'\t'+"MSGNR"+'\t'+"MSGV1"+'\t'+"MSGV2"+'\t'+"MSGV3"+'\t'+"MSGV4"+'\t'+"ENV"+'\t'+"FLDNAME");
        for (int i = 0; i < super.getMyTable().getNumRows(); i++){
            super.getMyTable().setRow(i);            
            System.out.println(super.getMyTable().getString("TCODE")  +
            '\t' + super.getMyTable().getString("DYNAME") +
            '\t' + super.getMyTable().getString("DYNUMB") +
            '\t' + super.getMyTable().getString("MSGTYP") +
            '\t' + super.getMyTable().getString("MSGSPRA") +
            '\t' + super.getMyTable().getString("MSGID") +
            '\t' + super.getMyTable().getString("MSGNR") +
            '\t' + super.getMyTable().getString("MSGV1") +
            '\t' + super.getMyTable().getString("MSGV2") +
            '\t' + super.getMyTable().getString("MSGV3") +
            '\t' + super.getMyTable().getString("MSGV4") +
            '\t' + super.getMyTable().getString("ENV") +
            '\t' + super.getMyTable().getString("FLDNAME") 
            );                
        }
    }

    public MessageReturnOperation getAMessageReturnOperation() {
        return aMessageReturnOperation;
    }

}
